package jobase

type ListNode[T any] struct {
	data T
	next *ListNode[T]
	prev *ListNode[T]
	list *LinkList[T]
}

func NewListNode[T any](val T) *ListNode[T] {
	return &ListNode[T]{
		data: val,
	}
}

func (n *ListNode[T]) Next() *ListNode[T] {
	if n.list != nil {
		if p := n.next; p != &n.list.root {
			return p
		}
	}

	return nil
}

func (n *ListNode[T]) Prev() *ListNode[T] {
	if n.list != nil {
		if p := n.prev; p != &n.list.root {
			return p
		}
	}

	return nil
}

func (n *ListNode[T]) Data() T {
	return n.data
}
